package com.travel.common.utils;

import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

public class JwtUtil {
    private static final String PRIVATE_KEY = "user";  // 定义密钥
    private static final long Expiration_Time = 1000 * 60 * 60 * 12;  // 过期时间 12 个小时

    /*
     * 生成 JWT 令牌
     * */
    public static String generatorJWT(Map<String, Object> claims) {
        JwtBuilder builder = Jwts.builder();
        return builder
                // header
                .addClaims(claims)        // payload, 存放自定义给的信息
                .setExpiration(new Date(System.currentTimeMillis() + Expiration_Time))  // 失效时间
                .signWith(SignatureAlgorithm.HS256, PRIVATE_KEY)  // 签名算法
                .compact();
    }

    /*
     * 校验 JWT 令牌
     * */
    public static Boolean checkJWT(String token) {
        if (token == null) {
            return false;
        }
        JwtParser jwtParser = Jwts.parser();
        // 解密, 如果 token 不正确，就不能正常解析
        try {
            jwtParser.setSigningKey(PRIVATE_KEY)
                    .parseClaimsJws(token);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

}
